package database;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import model.Usuario;
import model.UsuarioComum;

public class UsuarioDAO extends DAOClass {
	
	public <T> boolean inserir(T t){
		Usuario u;
		if(t instanceof Usuario)
			u = (Usuario) t;
		else
			return false;
		
		EnderecoDAO endDAO = new EnderecoDAO();
		if(!endDAO.inserir(u.getEndereco()))
			return false;
			
		u.getEndereco().setId(endDAO.getLastPK());
		
		PreparedStatement pstm;
		Connection conn = Conexao.getConexao();
		
		try {
			pstm = conn.prepareStatement("insert into usuario(nomeCompleto, login, email, senha, endereco_id) values (?,?,?,?,?)");
			pstm.setString(1, u.getNomeCompleto());
			pstm.setString(2, u.getLogin());
			pstm.setString(3, u.getEmail());
			pstm.setString(4, u.getSenha());
			pstm.setInt(5, u.getEndereco().getId());
			pstm.execute();
			pstm.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
		
		return true;
	}
	
	public Usuario getById(int id){
		Usuario u = null;
		
		try{
			Connection conn = Conexao.getConexao();
			PreparedStatement pstm = conn.prepareStatement("select * from usuario where id = ?");
			pstm.setInt(1, id);
			
			ResultSet rs = pstm.executeQuery();
			if(rs.next())
				u = preencheUsuario(rs);
			
			rs.close();
			pstm.close();
			conn.close();
			
		}
		catch(Exception e){
			e.printStackTrace();
		}
		return u;
	}

	public ArrayList<Usuario> getByStringField(String campo, String valor){
		ArrayList<Usuario> resultado = new ArrayList<Usuario>();
		
		try{
			ResultSet rs = getByStringField("usuario", campo, valor);
			
			while(rs.next()){
				Usuario u = preencheUsuario(rs);
				resultado.add(u);
			}
			rs.close();
		}
		catch(Exception e){
			e.printStackTrace();
		}
		return resultado;
	}
	
	private static Usuario preencheUsuario(ResultSet rs) throws SQLException {
		Usuario u = new UsuarioComum();
		
		u.setId(rs.getInt("id"));
		u.setLogin(rs.getString("login"));
		u.setNomeCompleto(rs.getString("nomeCompleto"));
		u.setEmail(rs.getString("email"));
		u.setSenha(rs.getString("senha"));
		
		return u;
	}
}
